﻿using System;
using System.Xml.Linq;
using DVK.SP2007;
using System.Collections.Generic;

namespace DVK.SP2007.UniversalClient
{
    /// <summary>
    /// interface for all Dvk Messages. 
    /// 
    /// It is similar to the universal client database dhl_message.
    /// </summary>
    public interface IDvkMessage
    {
        string CaseName { get; set; }
        /// <summary>
        /// Gets or sets the Dvk message data XML.
        /// </summary>
        /// <value>The data XML.</value>
        DvkXml DataXml { get; set; }
        /// <summary>
        /// Gets or sets the DHL id.
        /// </summary>
        /// <value>The DHL id.</value>
        int? DhlId { get; set; }
        /// <summary>
        /// Gets or sets the dvk fault.
        /// </summary>
        /// <value>The fault.</value>
        DvkFault Fault { get; set; }
        /// <summary>
        /// Gets or sets the name of the folder.
        /// </summary>
        /// <value>The name of the folder.</value>
        string FolderName { get; set; }
        /// <summary>
        /// Gets or sets the message id.
        /// </summary>
        /// <value>The id.</value>
        int Id { get; set; }
        /// <summary>
        /// Gets or sets a value indicating whether this message is incoming.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is incoming; otherwise, <c>false</c>.
        /// </value>
        bool IsIncoming { get; set; }
        /// <summary>
        /// Gets or sets the local item id.
        /// </summary>
        /// <value>The local item id.</value>
        int? LocalItemId { get; set; }
        /// <summary>
        /// Gets or sets the custom xml sent with the Dvk message.
        /// </summary>
        /// <value>The meta XML.</value>
        XElement MetaXml { get; set; }
        /// <summary>
        /// Gets or sets the recipient information.
        /// </summary>
        /// <value>The recipient.</value>
        SenderReceiverInfo Recipient { get; set; }
        /// <summary>
        /// Gets or sets the recipient status.
        /// </summary>
        /// <value>The recipient status.</value>
        DvkRecipientStatus RecipientStatus { get; set; }
        /// <summary>
        /// Gets or sets the sender information.
        /// </summary>
        /// <value>The sender.</value>
        SenderReceiverInfo Sender { get; set; }
        /// <summary>
        /// Gets or sets the sending date.
        /// </summary>
        /// <value>The sending date.</value>
        DateTime? SendingDate { get; set; }
        /// <summary>
        /// Gets or sets the received date.
        /// </summary>
        /// <value>The received date.</value>
        DateTime? ReceivedDate { get; set; }
        /// <summary>
        /// Gets or sets the sending status.
        /// </summary>
        /// <value>The sending status.</value>
        DvkSendingStatus SendingStatus { get; set; }
        /// <summary>
        /// Gets or sets a value indicating whether [status update needed].
        /// </summary>
        /// <value><c>true</c> if [status update needed]; otherwise, <c>false</c>.</value>
        bool StatusUpdateNeeded { get; set; }
        /// <summary>
        /// Gets or sets the title.
        /// </summary>
        /// <value>The title.</value>
        string Title { get; set; }
        /// <summary>
        /// Gets or sets the unit id.
        /// </summary>
        /// <value>The unit id.</value>
        int? UnitId { get; set; }
    }
}
